Skip to content

src: fix TextDecoder large-input and error paths - #65634

Open
JosephDoUrden wants to merge 1 commit into
nodejs:mainfrom
JosephDoUrden:fix/textdecoder-icu-error-path
Open

src: fix TextDecoder large-input and error paths#65634
JosephDoUrden wants to merge 1 commit into
nodejs:mainfrom
JosephDoUrden:fix/textdecoder-icu-error-path

Conversation

@JosephDoUrden

Copy link
Copy Markdown

Fixes #47645.

TextDecoder('utf-16le').decode(new Uint16Array(2**27)) throws ERR_ENCODING_INVALID_ENCODED_DATA even though the input is valid and the result (134M chars) fits comfortably in a V8 string. Root cause analysis is in the issue thread: ConverterObject::Decode() sizes the ICU target as 2 * min_char_size * input length UChars. min_char_size() is the minimum number of bytes per character, so multiplying by it inflates the bound instead of tightening it. For UTF-16 that requests 4x the input in UChars, which crosses ucnv_toUnicode()'s target range validation (0x3fffffff UChars) at exactly 2**27 elements, and ICU rejects the call before looking at a single byte. The failure then gets reported by the blanket invalid-data throw at the bottom of the function.

Two changes, same function:

The bound becomes 2 * (input length + pending bytes) / min_char_size, clamped to the ICU cap. Each character consumes at least min_char_size bytes and emits at most a surrogate pair, and bytes carried over from a previous chunk complete a character in this one, so they count too. For every min_char_size == 1 encoding (all the CJK ones) this is the same as or larger than the old bound, so nothing tightens there. Only utf-16le/be change, from 4x to 1x. After the change the whole representable range decodes: an input of 2 * MAX_STRING_LENGTH bytes produces exactly a MAX_STRING_LENGTH string.

Second, Decode() now returns after a failed StringBytes::Encode() instead of falling through, so the exception Encode scheduled (ERR_STRING_TOO_LONG for oversized results) is no longer replaced by ERR_ENCODING_INVALID_ENCODED_DATA. Boundary behaviour measured locally: 2 * MAX_STRING_LENGTH bytes decodes, +2 bytes throws ERR_STRING_TOO_LONG, lone surrogate with fatal: true still throws ERR_ENCODING_INVALID_ENCODED_DATA.

On the interaction with #61559 / #61041: I know the direction is to move TextDecoder off ICU, and #61559 would take utf-16 out of this path entirely. But big5, euc-jp, euc-kr, gb18030, shift_jis and iso-2022-jp keep routing through ConverterObject::Decode(), and the error-path fix applies to all of them, so this stands regardless of when the fast-path work lands. Happy to rebase if #61559 moves first.

Tests are in pummel because of the working set (~1.6 GiB and ~3 GiB peaks, both under the existing test-buffer-large-size-* ceiling). The streaming case uses an odd byte split so a code unit actually stays pending across the chunk boundary, and compares content, not just length. Everything ran locally on both a small-icu and a full-icu build: the two pummel tests (including the gb18030 ERR_STRING_TOO_LONG case, which needs full-icu), parallel/test-whatwg-encoding* and parallel/test-icu-*, plus an A/B sweep against an unpatched build of the same tree (91 sizes per endianness, no behaviour change other than the fixed cases) and a mid-character gb18030 streaming split to exercise the pending-bytes term on a min_char_size == 1 encoding.

Known remaining limitation: results that could never fit in a string (more than 0x3fffffff UChars, i.e. inputs over ~2 GiB) still surface the blanket error rather than ERR_STRING_TOO_LONG. Fixing that needs a chunked conversion loop; it did not seem worth the extra risk in this change.

AI disclosure: I used an AI coding agent for parts of the investigation and drafting. I verified the root cause against the ICU and Node sources myself, and every number in this description comes from runs on my own machine.

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. i18n-api Issues and PRs related to Node.js internationalization support. needs-ci PRs that need a full CI run. labels Aug 29, 2026
@github-actions

github-actions Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Benchmark GHA (util / text-decoder): https://github.com/nodejs/node/actions/runs/33238297431 🟢

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                                                                                      confidence improvement accuracy (*)    (**)   (***)
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                          2.68 %       ±5.81%  ±7.65%  ±9.82%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                            -0.71 %       ±9.48% ±12.50% ±16.04%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                          0.10 %       ±5.93%  ±7.82% ±10.03%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                            -0.94 %       ±9.73% ±12.82% ±16.45%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                          3.13 %       ±5.97%  ±7.87% ±10.10%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                            -0.35 %       ±9.70% ±12.78% ±16.40%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                          2.16 %       ±5.92%  ±7.80% ±10.01%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                            -0.39 %       ±9.66% ±12.73% ±16.33%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                          2.30 %       ±5.84%  ±7.70%  ±9.88%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                             0.01 %       ±3.07%  ±4.04%  ±5.19%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                          2.26 %       ±5.85%  ±7.71%  ±9.90%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                            -0.08 %       ±2.83%  ±3.73%  ±4.78%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                          1.54 %       ±5.61%  ±7.40%  ±9.50%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                            -1.87 %       ±4.37%  ±5.77%  ±7.40%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                          1.68 %       ±5.75%  ±7.58%  ±9.72%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                            -0.52 %       ±4.30%  ±5.67%  ±7.27%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                           0.80 %       ±9.92% ±13.07% ±16.78%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                             -2.03 %      ±11.82% ±15.57% ±19.98%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                          -0.61 %       ±9.55% ±12.58% ±16.14%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                             -0.64 %      ±12.12% ±15.98% ±20.51%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                          -1.88 %       ±9.39% ±12.38% ±15.88%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                             -0.65 %      ±12.23% ±16.12% ±20.68%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                          -1.41 %       ±9.62% ±12.68% ±16.27%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                              0.40 %      ±12.04% ±15.87% ±20.36%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                          -0.14 %       ±9.72% ±12.81% ±16.44%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                             -0.53 %       ±4.57%  ±6.03%  ±7.74%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                          -1.14 %       ±9.60% ±12.66% ±16.24%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                              0.17 %       ±4.65%  ±6.12%  ±7.86%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                           0.24 %       ±9.66% ±12.74% ±16.34%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                              0.79 %       ±8.09% ±10.66% ±13.68%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                          -0.06 %       ±9.72% ±12.82% ±16.45%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                              1.59 %       ±8.03% ±10.59% ±13.59%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                            -1.93 %      ±10.09% ±13.30% ±17.06%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                               -1.67 %      ±10.51% ±13.86% ±17.78%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                             1.04 %      ±10.21% ±13.46% ±17.27%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                                0.07 %      ±10.47% ±13.80% ±17.70%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                            -0.97 %       ±9.83% ±12.95% ±16.62%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                               -1.28 %      ±10.43% ±13.75% ±17.65%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                            -2.96 %      ±10.05% ±13.25% ±17.00%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                               -1.59 %      ±10.34% ±13.63% ±17.49%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                             0.67 %      ±10.15% ±13.37% ±17.16%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                               -0.49 %       ±9.96% ±13.13% ±16.85%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                            -1.41 %      ±10.10% ±13.31% ±17.08%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                                0.65 %       ±9.72% ±12.82% ±16.45%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                             1.53 %      ±10.27% ±13.54% ±17.37%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                                0.91 %      ±10.33% ±13.62% ±17.47%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                            -0.67 %      ±10.02% ±13.21% ±16.95%
util/text-decoder-stream.js type='ArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                                2.01 %      ±10.45% ±13.77% ±17.67%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                               3.42 %       ±4.72%  ±6.22%  ±7.98%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                                 -0.16 %       ±8.31% ±10.95% ±14.06%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                               0.95 %       ±4.49%  ±5.91%  ±7.59%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                                 -0.91 %       ±8.42% ±11.10% ±14.24%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                               3.05 %       ±4.78%  ±6.30%  ±8.09%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                                  1.10 %       ±8.48% ±11.17% ±14.33%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                               1.44 %       ±4.65%  ±6.13%  ±7.86%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                                  0.27 %       ±8.73% ±11.50% ±14.76%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                               2.85 %       ±4.74%  ±6.24%  ±8.01%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                                 -0.90 %       ±2.78%  ±3.67%  ±4.71%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                               0.79 %       ±4.71%  ±6.21%  ±7.97%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                                 -1.67 %       ±3.05%  ±4.02%  ±5.15%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                               1.13 %       ±4.69%  ±6.18%  ±7.93%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                                 -0.73 %       ±3.42%  ±4.51%  ±5.79%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                               1.31 %       ±4.76%  ±6.27%  ±8.05%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                                  0.55 %       ±3.35%  ±4.42%  ±5.67%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                               -1.28 %       ±6.61%  ±8.71% ±11.17%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                                   1.57 %       ±8.54% ±11.25% ±14.44%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                               -2.13 %       ±6.23%  ±8.21% ±10.54%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                                  -1.50 %       ±8.90% ±11.73% ±15.05%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                               -0.47 %       ±6.46%  ±8.51% ±10.92%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                                  -1.22 %       ±8.69% ±11.46% ±14.70%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                               -2.34 %       ±6.38%  ±8.41% ±10.79%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                                   1.36 %       ±8.71% ±11.47% ±14.72%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                               -2.61 %       ±6.34%  ±8.35% ±10.72%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                                   0.05 %       ±3.44%  ±4.53%  ±5.81%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                               -2.34 %       ±6.38%  ±8.41% ±10.79%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                                   0.57 %       ±3.61%  ±4.76%  ±6.11%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                                0.26 %       ±6.45%  ±8.51% ±10.91%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                                   0.99 %       ±5.51%  ±7.27%  ±9.33%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                                0.00 %       ±6.53%  ±8.60% ±11.04%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                                   1.02 %       ±5.59%  ±7.37%  ±9.45%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                                  0.94 %       ±8.62% ±11.36% ±14.58%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                                    -0.74 %       ±8.64% ±11.38% ±14.61%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                                 -1.93 %       ±8.02% ±10.57% ±13.56%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                                     0.37 %       ±8.77% ±11.57% ±14.84%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                                 -2.04 %       ±8.24% ±10.86% ±13.93%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                                    -1.98 %       ±8.89% ±11.72% ±15.04%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                                 -0.60 %       ±8.69% ±11.45% ±14.69%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                                     0.53 %       ±8.93% ±11.77% ±15.10%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                                 -1.20 %       ±8.20% ±10.81% ±13.87%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                                     0.15 %       ±8.89% ±11.72% ±15.03%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                                 -1.05 %       ±7.98% ±10.51% ±13.49%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                                     0.40 %       ±8.93% ±11.77% ±15.11%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                                 -1.16 %       ±8.35% ±11.01% ±14.12%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                                     0.04 %       ±9.17% ±12.09% ±15.51%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                                  1.86 %       ±8.56% ±11.28% ±14.48%
util/text-decoder-stream.js type='Buffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                                    -0.75 %       ±9.09% ±11.98% ±15.38%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                    2.03 %       ±6.32%  ±8.33% ±10.68%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                      -0.36 %       ±9.43% ±12.43% ±15.95%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                    1.42 %       ±6.00%  ±7.91% ±10.15%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                      -1.06 %       ±9.77% ±12.87% ±16.52%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                    3.67 %       ±6.27%  ±8.26% ±10.60%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                       1.14 %       ±9.67% ±12.74% ±16.35%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                    2.08 %       ±6.29%  ±8.29% ±10.63%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                       1.11 %       ±9.69% ±12.78% ±16.40%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                    4.18 %       ±6.30%  ±8.31% ±10.66%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                       0.34 %       ±3.19%  ±4.21%  ±5.40%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                    1.54 %       ±6.04%  ±7.96% ±10.22%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                      -1.12 %       ±3.22%  ±4.24%  ±5.44%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                    2.42 %       ±5.97%  ±7.86% ±10.09%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                      -2.51 %       ±4.84%  ±6.38%  ±8.19%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                    1.34 %       ±6.00%  ±7.90% ±10.14%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=131072 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                       0.69 %       ±4.69%  ±6.18%  ±7.93%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                     0.82 %       ±9.79% ±12.91% ±16.56%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                        0.33 %      ±11.92% ±15.71% ±20.15%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                    -0.30 %       ±9.46% ±12.47% ±16.01%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                       -1.03 %      ±11.73% ±15.46% ±19.84%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                    -0.03 %       ±9.40% ±12.40% ±15.90%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                       -0.01 %      ±12.04% ±15.87% ±20.36%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                    -0.14 %       ±9.39% ±12.38% ±15.89%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                        2.37 %      ±12.03% ±15.86% ±20.35%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                     2.78 %       ±9.72% ±12.82% ±16.45%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                       -0.01 %       ±5.11%  ±6.73%  ±8.64%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                    -0.76 %       ±9.51% ±12.53% ±16.08%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                        0.55 %       ±5.27%  ±6.94%  ±8.91%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                     0.20 %       ±9.73% ±12.83% ±16.46%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                       -0.25 %       ±8.59% ±11.33% ±14.53%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                     1.39 %       ±9.64% ±12.71% ±16.31%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=16384 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                        1.76 %       ±8.33% ±10.97% ±14.08%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-16le'                      -0.20 %      ±10.15% ±13.38% ±17.17%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=0 encoding='utf-8'                          0.71 %      ±10.79% ±14.22% ±18.24%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-16le'                      -0.15 %      ±10.11% ±13.33% ±17.11%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=0 ignoreBOM=1 encoding='utf-8'                          0.88 %      ±10.66% ±14.05% ±18.03%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-16le'                      -0.25 %      ±10.08% ±13.29% ±17.05%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=0 encoding='utf-8'                         -1.16 %      ±10.68% ±14.07% ±18.06%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-16le'                      -3.36 %       ±9.97% ±13.14% ±16.86%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=0 fatal=1 ignoreBOM=1 encoding='utf-8'                         -0.39 %      ±10.59% ±13.96% ±17.91%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-16le'                       1.42 %      ±10.19% ±13.43% ±17.23%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=0 encoding='utf-8'                         -0.95 %      ±10.03% ±13.22% ±16.97%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-16le'                      -1.67 %       ±9.88% ±13.02% ±16.71%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=0 ignoreBOM=1 encoding='utf-8'                         -0.60 %      ±10.01% ±13.20% ±16.93%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-16le'                      -0.28 %      ±10.24% ±13.50% ±17.32%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=0 encoding='utf-8'                          2.67 %      ±10.69% ±14.09% ±18.08%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-16le'                      -0.48 %      ±10.00% ±13.18% ±16.92%
util/text-decoder-stream.js type='SharedArrayBuffer' n=1000 chunks=10 len=256 unicode=1 fatal=1 ignoreBOM=1 encoding='utf-8'                          0.68 %      ±10.81% ±14.25% ±18.28%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                   1.18 %       ±9.15% ±12.06% ±15.47%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                        0.50 %       ±9.24% ±12.17% ±15.62%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                                 0.47 %       ±9.14% ±12.05% ±15.46%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                  -0.21 %       ±9.40% ±12.39% ±15.90%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                        0.72 %       ±9.39% ±12.37% ±15.87%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                                -0.51 %       ±9.22% ±12.15% ±15.59%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                   0.47 %       ±9.50% ±12.53% ±16.08%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                       -1.87 %       ±9.07% ±11.96% ±15.34%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                                 0.38 %       ±9.04% ±11.92% ±15.29%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                  -0.89 %       ±9.40% ±12.39% ±15.90%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                        0.74 %       ±9.37% ±12.35% ±15.84%
util/text-decoder.js n=1000 len=131072 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                                -1.49 %       ±8.88% ±11.71% ±15.02%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                        3.23 %       ±9.54% ±12.57% ±16.13%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                            -0.02 %       ±9.04% ±11.92% ±15.29%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                                      0.21 %       ±9.17% ±12.09% ±15.52%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                       -0.41 %       ±9.44% ±12.44% ±15.97%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                             0.15 %       ±9.07% ±11.95% ±15.33%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                                      1.71 %       ±9.21% ±12.14% ±15.58%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                        1.56 %       ±9.42% ±12.42% ±15.93%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                             0.73 %       ±9.04% ±11.91% ±15.29%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                                      0.02 %       ±9.06% ±11.94% ±15.33%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                       -1.21 %       ±9.50% ±12.53% ±16.07%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                             0.41 %       ±9.06% ±11.94% ±15.33%
util/text-decoder.js n=1000 len=131072 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                                     -1.04 %       ±9.10% ±12.00% ±15.40%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                             0.68 %       ±9.19% ±12.11% ±15.55%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                 -2.30 %       ±7.97% ±10.51% ±13.48%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                          -0.50 %       ±8.94% ±11.78% ±15.12%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                            -0.03 %       ±9.17% ±12.09% ±15.51%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                 -0.29 %       ±8.08% ±10.65% ±13.67%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                          -0.40 %       ±8.81% ±11.61% ±14.90%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                             0.33 %       ±9.16% ±12.07% ±15.49%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                  0.25 %       ±8.19% ±10.79% ±13.85%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                           0.27 %       ±9.00% ±11.86% ±15.22%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                            -0.25 %       ±8.92% ±11.76% ±15.09%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                  0.40 %       ±8.02% ±10.57% ±13.56%
util/text-decoder.js n=1000 len=131072 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                          -0.51 %       ±8.96% ±11.82% ±15.16%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                         0.32 %       ±7.92% ±10.44% ±13.40%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                             -1.78 %       ±2.23%  ±2.94%  ±3.78%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                       0.22 %       ±7.60% ±10.02% ±12.85%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                         0.05 %       ±7.96% ±10.49% ±13.47%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                             -1.28 %       ±2.31%  ±3.04%  ±3.90%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                      -0.83 %       ±7.58%  ±9.99% ±12.82%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                        -0.01 %       ±8.33% ±10.99% ±14.10%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                             -1.91 %       ±7.16%  ±9.44% ±12.12%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                       0.96 %       ±7.65% ±10.08% ±12.94%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                        -1.28 %       ±8.37% ±11.04% ±14.16%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                             -2.05 %       ±6.93%  ±9.14% ±11.72%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                      -1.41 %       ±7.36%  ±9.70% ±12.44%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                              0.07 %       ±7.88% ±10.39% ±13.33%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                  -1.18 %       ±2.23%  ±2.94%  ±3.77%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                           -1.07 %       ±7.57%  ±9.97% ±12.80%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                              1.07 %       ±7.99% ±10.53% ±13.51%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                  -0.75 %       ±2.19%  ±2.89%  ±3.71%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                           -0.08 %       ±7.60% ±10.02% ±12.85%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                              0.02 %       ±8.40% ±11.07% ±14.20%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                  -2.74 %       ±7.16%  ±9.43% ±12.10%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                           -1.37 %       ±7.51%  ±9.90% ±12.71%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                             -0.70 %       ±8.54% ±11.25% ±14.44%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                   0.10 %       ±6.97%  ±9.19% ±11.79%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                           -1.69 %       ±7.48%  ±9.86% ±12.65%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                   0.56 %       ±4.97%  ±6.55%  ±8.40%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                       -1.24 %       ±2.14%  ±2.83%  ±3.63%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                 1.16 %       ±5.09%  ±6.72%  ±8.62%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                  -0.33 %       ±5.22%  ±6.88%  ±8.83%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                       -1.49 %       ±2.28%  ±3.01%  ±3.86%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                -0.05 %       ±4.85%  ±6.39%  ±8.20%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                   0.45 %       ±5.13%  ±6.76%  ±8.68%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                        0.01 %       ±7.04%  ±9.27% ±11.90%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                 1.12 %       ±4.87%  ±6.42%  ±8.24%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                   0.25 %       ±5.13%  ±6.77%  ±8.68%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                       -1.58 %       ±6.72%  ±8.86% ±11.37%
util/text-decoder.js n=1000 len=131072 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                 0.66 %       ±4.95%  ±6.53%  ±8.38%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                         0.67 %       ±7.70% ±10.15% ±13.02%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                             -1.00 %      ±11.91% ±15.70% ±20.15%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                      -0.35 %       ±7.71% ±10.16% ±13.04%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                        -0.26 %       ±7.63% ±10.06% ±12.91%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                             -0.22 %      ±11.97% ±15.78% ±20.24%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                      -0.05 %       ±7.90% ±10.42% ±13.37%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                         0.11 %       ±7.75% ±10.21% ±13.11%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                             -0.77 %       ±7.47%  ±9.85% ±12.64%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                       1.00 %       ±7.81% ±10.29% ±13.21%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                        -0.93 %       ±7.67% ±10.11% ±12.97%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                             -0.58 %       ±7.44%  ±9.80% ±12.58%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                      -0.61 %       ±7.73% ±10.19% ±13.08%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                             -0.71 %       ±7.52%  ±9.92% ±12.72%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                  -1.95 %      ±11.64% ±15.34% ±19.68%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                           -0.57 %       ±7.84% ±10.33% ±13.25%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                              0.32 %       ±7.71% ±10.16% ±13.04%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                  -1.20 %      ±11.78% ±15.53% ±19.93%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                           -0.85 %       ±7.86% ±10.37% ±13.30%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                              0.24 %       ±7.73% ±10.19% ±13.08%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                  -0.66 %       ±7.47%  ±9.85% ±12.64%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                            0.81 %       ±7.83% ±10.32% ±13.24%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                             -0.10 %       ±7.75% ±10.22% ±13.11%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                   0.20 %       ±7.31%  ±9.64% ±12.37%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                           -1.54 %       ±7.84% ±10.34% ±13.26%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                  -0.28 %       ±4.97%  ±6.55%  ±8.41%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                       -0.64 %      ±11.50% ±15.16% ±19.45%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                 0.09 %       ±4.98%  ±6.57%  ±8.43%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                  -0.15 %       ±5.16%  ±6.80%  ±8.73%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                       -1.24 %      ±11.57% ±15.25% ±19.57%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                -0.67 %       ±4.91%  ±6.48%  ±8.31%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                  -0.24 %       ±5.05%  ±6.66%  ±8.54%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                       -0.36 %       ±7.27%  ±9.59% ±12.30%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                 0.53 %       ±4.89%  ±6.44%  ±8.27%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                  -0.53 %       ±5.23%  ±6.89%  ±8.84%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                       -0.16 %       ±7.06%  ±9.31% ±11.94%
util/text-decoder.js n=1000 len=131072 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                -1.50 %       ±4.91%  ±6.47%  ±8.31%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                    1.87 %      ±11.27% ±14.85% ±19.05%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                        -0.87 %      ±12.01% ±15.83% ±20.31%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                                 -0.34 %      ±11.36% ±14.97% ±19.21%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                   -0.47 %      ±11.34% ±14.94% ±19.17%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                        -0.29 %      ±12.16% ±16.03% ±20.57%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                                  0.33 %      ±11.46% ±15.11% ±19.39%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                    0.58 %      ±11.64% ±15.34% ±19.69%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                        -0.91 %      ±12.09% ±15.94% ±20.45%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                                  0.45 %      ±11.24% ±14.81% ±19.01%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                   -0.98 %      ±11.73% ±15.46% ±19.83%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                         3.38 %      ±12.22% ±16.11% ±20.68%
util/text-decoder.js n=1000 len=16384 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                                 -0.88 %      ±11.28% ±14.87% ±19.07%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                         3.13 %      ±11.57% ±15.25% ±19.57%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                              1.18 %      ±11.96% ±15.76% ±20.23%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                                       2.85 %      ±11.42% ±15.06% ±19.32%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                         1.98 %      ±11.57% ±15.25% ±19.57%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                              2.54 %      ±12.07% ±15.91% ±20.42%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                                       0.71 %      ±11.22% ±14.78% ±18.97%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                         1.48 %      ±11.49% ±15.14% ±19.43%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                              0.86 %      ±11.77% ±15.51% ±19.91%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                                      -2.37 %      ±11.01% ±14.51% ±18.62%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                         0.08 %      ±11.78% ±15.53% ±19.93%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                              0.99 %      ±12.01% ±15.82% ±20.31%
util/text-decoder.js n=1000 len=16384 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                                      -1.44 %      ±11.06% ±14.58% ±18.71%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                             -1.05 %      ±11.44% ±15.08% ±19.35%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                   0.70 %      ±11.75% ±15.49% ±19.87%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                           -0.14 %      ±11.07% ±14.59% ±18.72%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                             -2.10 %      ±11.40% ±15.03% ±19.29%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                   1.56 %      ±12.00% ±15.81% ±20.29%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                           -0.04 %      ±11.43% ±15.07% ±19.34%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                             -0.23 %      ±11.27% ±14.85% ±19.06%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                  -1.27 %      ±11.67% ±15.39% ±19.75%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                            1.80 %      ±11.23% ±14.80% ±18.99%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                              0.33 %      ±11.53% ±15.19% ±19.50%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                   3.41 %      ±11.95% ±15.75% ±20.21%
util/text-decoder.js n=1000 len=16384 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                           -1.08 %      ±11.23% ±14.80% ±18.99%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                          1.25 %       ±8.55% ±11.27% ±14.47%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                              -1.43 %       ±2.94%  ±3.87%  ±4.97%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                       -0.41 %       ±8.04% ±10.60% ±13.60%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                         -0.27 %       ±8.54% ±11.26% ±14.45%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                              -1.06 %       ±2.90%  ±3.83%  ±4.91%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                       -0.14 %       ±7.93% ±10.45% ±13.41%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                         -1.06 %       ±8.97% ±11.82% ±15.17%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                              -0.92 %       ±8.39% ±11.06% ±14.19%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                        0.84 %       ±8.06% ±10.63% ±13.63%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                         -0.78 %       ±9.34% ±12.31% ±15.80%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                              -1.54 %       ±8.12% ±10.70% ±13.73%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                        1.49 %       ±7.99% ±10.53% ±13.51%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                              -0.23 %       ±8.62% ±11.36% ±14.57%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                   -1.63 %       ±2.76%  ±3.64%  ±4.68%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                             0.30 %       ±8.13% ±10.72% ±13.76%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                               1.20 %       ±8.78% ±11.57% ±14.84%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                   -0.45 %       ±2.91%  ±3.84%  ±4.92%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                             0.81 %       ±7.98% ±10.51% ±13.49%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                               1.77 %       ±9.31% ±12.27% ±15.74%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                   -0.62 %       ±8.54% ±11.26% ±14.44%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                            -0.00 %       ±7.85% ±10.35% ±13.28%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                              -0.17 %       ±9.22% ±12.15% ±15.59%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                   -3.69 %       ±7.94% ±10.47% ±13.43%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                            -0.88 %       ±8.23% ±10.84% ±13.91%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                    0.05 %       ±5.07%  ±6.68%  ±8.58%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                        -2.29 %       ±2.89%  ±3.81%  ±4.89%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                 -0.31 %       ±5.15%  ±6.79%  ±8.71%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                   -0.34 %       ±5.27%  ±6.95%  ±8.92%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                        -1.82 %       ±2.87%  ±3.78%  ±4.85%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                 -1.67 %       ±5.17%  ±6.82%  ±8.75%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                    0.45 %       ±6.20%  ±8.17% ±10.48%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                        -0.71 %       ±8.43% ±11.11% ±14.26%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                  1.16 %       ±5.25%  ±6.92%  ±8.88%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                   -0.06 %       ±6.17%  ±8.13% ±10.43%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                        -2.47 %       ±8.25% ±10.87% ±13.95%
util/text-decoder.js n=1000 len=16384 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                 -0.10 %       ±5.10%  ±6.72%  ±8.62%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                          0.76 %       ±8.57% ±11.29% ±14.49%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                               1.98 %       ±9.45% ±12.46% ±15.98%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                        1.57 %       ±8.55% ±11.27% ±14.46%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                         -0.73 %       ±8.35% ±11.01% ±14.12%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                              -0.79 %       ±9.05% ±11.93% ±15.31%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                        0.64 %       ±8.45% ±11.14% ±14.29%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                          0.04 %       ±8.41% ±11.09% ±14.23%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                              -1.10 %       ±9.09% ±11.98% ±15.37%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                        1.73 %       ±8.48% ±11.17% ±14.34%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                         -3.19 %       ±8.27% ±10.90% ±13.98%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                               0.04 %       ±8.69% ±11.45% ±14.69%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                       -0.45 %       ±8.49% ±11.20% ±14.37%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                              -1.11 %       ±8.44% ±11.12% ±14.27%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                   -3.40 %       ±8.86% ±11.68% ±14.98%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                            -1.29 %       ±8.45% ±11.14% ±14.30%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                              -0.30 %       ±8.48% ±11.18% ±14.34%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                    1.67 %       ±9.32% ±12.28% ±15.76%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                             0.31 %       ±8.56% ±11.28% ±14.47%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                               0.92 %       ±8.55% ±11.27% ±14.46%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                   -1.91 %       ±8.95% ±11.80% ±15.14%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                            -1.09 %       ±8.40% ±11.07% ±14.20%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                               0.26 %       ±8.55% ±11.27% ±14.47%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                   -1.09 %       ±8.57% ±11.29% ±14.49%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                            -0.64 %       ±8.60% ±11.34% ±14.55%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                   -0.45 %       ±4.93%  ±6.50%  ±8.34%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                        -2.12 %       ±8.91% ±11.74% ±15.07%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                  0.54 %       ±5.37%  ±7.08%  ±9.08%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                    1.11 %       ±5.27%  ±6.95%  ±8.92%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                         0.61 %       ±9.32% ±12.28% ±15.76%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                  0.07 %       ±4.99%  ±6.58%  ±8.45%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                   -0.34 %       ±5.23%  ±6.89%  ±8.84%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                         2.05 %       ±9.15% ±12.07% ±15.48%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                  1.20 %       ±5.30%  ±6.98%  ±8.96%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                   -0.86 %       ±5.34%  ±7.04%  ±9.04%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                        -1.49 %       ±8.62% ±11.37% ±14.59%
util/text-decoder.js n=1000 len=16384 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                 -1.57 %       ±5.19%  ±6.83%  ±8.77%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                     -1.31 %      ±13.40% ±17.67% ±22.67%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                          -0.21 %      ±14.13% ±18.63% ±23.90%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                                   -0.24 %      ±13.56% ±17.88% ±22.94%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                      2.06 %      ±13.85% ±18.26% ±23.43%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                          -0.63 %      ±14.10% ±18.59% ±23.85%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                                   -0.53 %      ±13.53% ±17.83% ±22.88%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                     -1.61 %      ±13.45% ±17.74% ±22.76%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                          -1.06 %      ±13.91% ±18.34% ±23.53%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                                   -0.42 %      ±12.91% ±17.01% ±21.83%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                     -0.50 %      ±13.79% ±18.17% ±23.32%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                           2.99 %      ±13.85% ±18.25% ±23.42%
util/text-decoder.js n=1000 len=256 content='ascii' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                                   -2.29 %      ±13.42% ±17.69% ±22.70%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                           2.35 %      ±13.46% ±17.74% ±22.76%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                               -1.76 %      ±13.55% ±17.86% ±22.91%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                                         0.10 %      ±13.28% ±17.50% ±22.46%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                          -0.06 %      ±13.52% ±17.81% ±22.86%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                               -0.20 %      ±14.13% ±18.63% ±23.90%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                                        -2.45 %      ±13.02% ±17.16% ±22.02%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                           0.24 %      ±13.39% ±17.64% ±22.64%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                                2.64 %      ±14.05% ±18.51% ±23.76%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                                        -1.11 %      ±12.90% ±17.01% ±21.82%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                           1.16 %      ±13.47% ±17.76% ±22.78%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                                0.77 %      ±13.62% ±17.95% ±23.03%
util/text-decoder.js n=1000 len=256 content='ascii' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                                        -1.61 %      ±13.04% ±17.18% ±22.05%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                               -0.20 %      ±13.69% ±18.04% ±23.15%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                    -1.00 %      ±14.34% ±18.91% ±24.26%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                             -0.88 %      ±13.28% ±17.51% ±22.47%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                               -0.36 %      ±13.66% ±18.00% ±23.10%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                    -0.80 %      ±14.13% ±18.63% ±23.90%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                              0.92 %      ±13.79% ±18.17% ±23.32%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                1.44 %      ±13.48% ±17.77% ±22.80%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                    -2.92 %      ±13.47% ±17.75% ±22.78%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                              1.17 %      ±13.50% ±17.80% ±22.84%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                               -0.34 %      ±13.59% ±17.91% ±22.98%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                     0.02 %      ±13.68% ±18.03% ±23.14%
util/text-decoder.js n=1000 len=256 content='ascii' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                             -2.34 %      ±13.33% ±17.57% ±22.54%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                            1.08 %      ±11.29% ±14.89% ±19.10%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                -4.10 %       ±9.50% ±12.52% ±16.06%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                          0.16 %      ±11.03% ±14.53% ±18.65%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                           -0.78 %      ±11.46% ±15.11% ±19.38%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                -0.43 %       ±9.89% ±13.03% ±16.73%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                         -0.13 %      ±11.06% ±14.57% ±18.70%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                           -0.14 %      ±10.52% ±13.87% ±17.80%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                -2.93 %      ±12.89% ±16.98% ±21.79%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                         -0.05 %      ±11.18% ±14.74% ±18.91%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                           -2.78 %      ±10.43% ±13.75% ±17.65%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                 0.93 %      ±12.82% ±16.90% ±21.69%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                         -7.16 %      ±10.56% ±13.92% ±17.86%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                 0.81 %      ±10.87% ±14.33% ±18.38%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                     -3.48 %       ±9.73% ±12.82% ±16.45%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                              -1.53 %      ±11.12% ±14.66% ±18.81%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                 0.60 %      ±11.32% ±14.92% ±19.15%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                     -2.01 %       ±9.75% ±12.85% ±16.49%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                              -0.89 %      ±10.83% ±14.27% ±18.31%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                 0.03 %      ±10.78% ±14.21% ±18.24%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                     -0.12 %      ±12.79% ±16.86% ±21.64%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                               0.09 %      ±11.00% ±14.50% ±18.61%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                 0.27 %      ±10.83% ±14.27% ±18.32%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                     -0.06 %      ±12.33% ±16.25% ±20.86%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                               0.66 %      ±11.40% ±15.02% ±19.27%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                     -1.66 %      ±10.66% ±14.05% ±18.02%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                           2.15 %      ±10.49% ±13.83% ±17.75%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                   -1.81 %      ±10.77% ±14.20% ±18.22%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                     -2.76 %      ±10.47% ±13.80% ±17.71%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                          -0.48 %      ±10.57% ±13.94% ±17.88%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                   -0.79 %      ±10.74% ±14.16% ±18.17%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                      1.23 %      ±10.56% ±13.91% ±17.85%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                          -0.47 %      ±12.76% ±16.82% ±21.58%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                   -4.00 %      ±10.56% ±13.93% ±17.87%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                     -1.13 %      ±10.37% ±13.67% ±17.54%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                          -0.54 %      ±12.44% ±16.40% ±21.05%
util/text-decoder.js n=1000 len=256 content='one-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                   -1.95 %      ±10.75% ±14.17% ±18.18%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                            2.75 %      ±11.58% ±15.26% ±19.58%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                 4.57 %      ±13.13% ±17.31% ±22.21%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                         -1.71 %      ±11.02% ±14.52% ±18.63%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                           -1.87 %      ±11.49% ±15.15% ±19.43%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                 0.92 %      ±12.84% ±16.93% ±21.72%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                         -1.69 %      ±10.99% ±14.49% ±18.59%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                            2.09 %      ±11.42% ±15.05% ±19.31%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                -1.06 %      ±13.54% ±17.85% ±22.90%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                         -0.16 %      ±11.11% ±14.64% ±18.79%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                           -3.49 %      ±11.21% ±14.78% ±18.96%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                -2.10 %      ±13.16% ±17.35% ±22.26%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='ArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                         -2.86 %      ±11.00% ±14.49% ±18.60%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                                 0.25 %      ±10.89% ±14.35% ±18.41%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='utf-8'                                      0.38 %      ±12.43% ±16.39% ±21.03%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                               2.05 %      ±11.25% ±14.83% ±19.03%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                                -1.22 %      ±10.93% ±14.41% ±18.49%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='utf-8'                                      3.19 %      ±12.84% ±16.93% ±21.72%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                               2.03 %      ±11.31% ±14.91% ±19.13%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                                 0.42 %      ±11.52% ±15.18% ±19.48%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='utf-8'                                      0.17 %      ±13.32% ±17.56% ±22.54%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                               0.03 %      ±11.02% ±14.52% ±18.64%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                                -0.44 %      ±11.34% ±14.95% ±19.18%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='utf-8'                                      0.17 %      ±13.50% ±17.80% ±22.84%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='Buffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                              -3.41 %      ±10.93% ±14.41% ±18.49%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='iso-8859-3'                      1.18 %      ±10.87% ±14.32% ±18.38%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='utf-8'                          -3.13 %      ±12.38% ±16.32% ±20.94%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=0 encoding='windows-1252'                   -0.90 %      ±10.64% ±14.03% ±18.00%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='iso-8859-3'                      1.12 %      ±11.04% ±14.55% ±18.67%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='utf-8'                           0.79 %      ±12.85% ±16.94% ±21.73%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=0 ignoreBOM=1 encoding='windows-1252'                   -1.67 %      ±10.57% ±13.93% ±17.87%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='iso-8859-3'                     -0.94 %      ±10.89% ±14.35% ±18.42%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='utf-8'                           2.17 %      ±13.67% ±18.01% ±23.11%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=0 encoding='windows-1252'                   -0.43 %      ±10.38% ±13.68% ±17.55%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='iso-8859-3'                      1.05 %      ±10.73% ±14.14% ±18.14%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='utf-8'                          -3.42 %      ±12.75% ±16.81% ±21.56%
util/text-decoder.js n=1000 len=256 content='two-byte-string' type='SharedArrayBuffer' fatal=1 ignoreBOM=1 encoding='windows-1252'                   -1.89 %      ±10.59% ±13.96% ±17.92%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 468 comparisons, you can thus
expect the following amount of false-positive results:
  23.40 false positives, when considering a   5% risk acceptance (*, **, ***),
  4.68 false positives, when considering a   1% risk acceptance (**, ***),
  0.47 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

@codecov

codecov Bot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 66.66667% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.00%. Comparing base (e7a6370) to head (77c5bcd).
⚠️ Report is 47 commits behind head on main.

Files with missing lines Patch % Lines
src/node_i18n.cc 66.66% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #65634      +/-   ##
==========================================
- Coverage   90.03%   90.00%   -0.03%     
==========================================
  Files         754      755       +1     
  Lines      255744   257283    +1539     
  Branches    48313    48774     +461     
==========================================
+ Hits       230252   231565    +1313     
- Misses      16622    16793     +171     
- Partials     8870     8925      +55     
Files with missing lines Coverage Δ
src/node_i18n.cc 77.77% <66.66%> (-0.50%) ⬇️

... and 90 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@MikeMcC399

This comment was marked as resolved.

@JosephDoUrden
JosephDoUrden force-pushed the fix/textdecoder-icu-error-path branch from 953b4f5 to 4524fad Compare August 30, 2026 08:45
@JosephDoUrden

Copy link
Copy Markdown
Author

hey @MikeMcC399, the branch has been rebased, and all checks have been passed. Thanks

@MikeMcC399

This comment was marked as outdated.

Comment thread src/node_i18n.cc Outdated
ConverterObject::Decode() sized its ICU target buffer as the input
length, or the pending byte count when flushing if that is larger,
times min_char_size(), times 2. min_char_size() is the minimum number
of bytes per character, so multiplying by it inflates the bound
instead of tightening it: for UTF-16 (min_char_size() == 2) a 256 MiB
input requested 2^30 UChars, which fails ucnv_toUnicode()'s internal
targetLimit validation before any input is examined, and the failure
was then reported as ERR_ENCODING_INVALID_ENCODED_DATA. Bound the
buffer by 2 * (input length + pending bytes) / min_char_size instead:
each character consumes at least min_char_size bytes and emits at
most one surrogate pair, and bytes carried over from previous chunks
complete a character in this one. The request is also clamped to
String::kMaxLength + 1 UChars, one extra for a leading BOM that the
success path strips: a result that overflows the clamped buffer
cannot become a V8 string even after the strip, so it is reported as
ERR_STRING_TOO_LONG, the same error StringBytes::Encode() throws for
oversized results. This decodes every input whose result fits in a
V8 string; inputs above ICU's 2 GiB single-call source limit keep
their existing error behaviour.

Also return after a failed StringBytes::Encode() instead of falling
through, so the exception it scheduled (such as ERR_STRING_TOO_LONG
for results beyond the string limit) is no longer masked by
ERR_ENCODING_INVALID_ENCODED_DATA.

The `2 *` factor dates to 98ec909, which restored the effective
capacity that an earlier targetLimit arithmetic bug had provided by
accident. The min_char_size() multiplier itself is older, from
ed21cb1.

Fixes: nodejs#47645
Refs: nodejs#41026
Refs: nodejs#61559
Signed-off-by: Yusufhan Saçak <yusufhansacak@icloud.com>
@JosephDoUrden
JosephDoUrden force-pushed the fix/textdecoder-icu-error-path branch from 4524fad to 77c5bcd Compare September 2, 2026 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++ Issues and PRs that require attention from people who are familiar with C++. i18n-api Issues and PRs related to Node.js internationalization support. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TextDecoder: ERR_ENCODING_INVALID_ENCODED_DATA on very long array buffer

4 participants